#include <stdlib.h>
#include <stdio.h>
int * queen = (int *)malloc(sizeof(int )* 8);
int column[8]={0};
int left[15]={0};
int right[15]={0};
int cnt=0;
int * Queen(){
    int * queen = (int *)malloc(sizeof(int )* 8);
    int column[8]={0};
    int left[15]={0};
    int right[15]={0};
    int top=-1,i=0,j=0;
    while(top!=7){
        for(;j<8;j++){
            if((!column[j])&&(!left[i+j])&&(!right[i+7-j])){
                queen[++top]=j;
                column[j]=1;
                left[i+j]=1;
                right[i+7-j]=1;
                i++;
                j=0;
                break;
            }
        }
        if(j==8){
            i--;
            j=queen[top--];
            column[j]=left[i+j]=right[i+7-j]=0;
            j++;
        }
    }
    return queen;
}
void PrintQueen(int Q[])
{
    printf("这是第%d个解:\n",cnt++);
    int i,j;
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
        {
            if(Q[i]==j)
                printf("Q");
            else
                printf("X");
        }
        printf("\n");
    }
    printf("\n");
}
void RecursionQueen(int i){
    int j=0;
    for(j=0;j<8;j++){
        if((!column[j])&&(!left[i+j])&&(!right[i+7-j])){
            queen[i]=j;
            column[j]=1;
            left[i+j]=1;
            right[i+7-j]=1;
            if(i<7)
                RecursionQueen(i+1);
            else
                PrintQueen(queen);
            column[j]=left[i+j]=right[i+7-j]=0;
        }
    }

}


int main() {
//    int * s = Queen();
//    for(int i=0;i<8;i++){
//        printf("%d%d\t",i,s[i]);
//    }
    RecursionQueen(0);
    return 0;
}